--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit f92858866a1a33352633da867bd00a67e0b60172
Parents : 13484a6
Author : Mark Qvist <mark@unsigned.io>
Date : 2022-05-17T19:21:14+02:00
Added destination ignore functionality
Changes
3 files changed, 52 insertions(+), 17 deletions(-)
Diff
diff --git a/nomadnet/Conversation.py b/nomadnet/Conversation.py
index f97c7d0..6d66219 100644
--- a/nomadnet/Conversation.py
+++ b/nomadnet/Conversation.py
@@ -14,20 +14,25 @@ class Conversation:
@staticmethod
def received_announce(destination_hash, announced_identity, app_data):
app = nomadnet.NomadNetworkApp.get_shared_instance()
- destination_hash_text = RNS.hexrep(destination_hash, delimit=False)
- # Check if the announced destination is in
- # our list of conversations
- if destination_hash_text in [e[0] for e in Conversation.conversation_list(app)]:
- if app.directory.find(destination_hash):
- if Conversation.created_callback != None:
- Conversation.created_callback()
- else:
- if Conversation.created_callback != None:
- Conversation.created_callback()
- # Add the announce to the directory announce
- # stream logger
- app.directory.lxmf_announce_received(destination_hash, app_data)
+ if not destination_hash in app.ignored_list:
+ destination_hash_text = RNS.hexrep(destination_hash, delimit=False)
+ # Check if the announced destination is in
+ # our list of conversations
+ if destination_hash_text in [e[0] for e in Conversation.conversation_list(app)]:
+ if app.directory.find(destination_hash):
+ if Conversation.created_callback != None:
+ Conversation.created_callback()
+ else:
+ if Conversation.created_callback != None:
+ Conversation.created_callback()
+
+ # Add the announce to the directory announce
+ # stream logger
+ app.directory.lxmf_announce_received(destination_hash, app_data)
+
+ else:
+ RNS.log("Ignored announce from "+RNS.prettyhexrep(destination_hash), RNS.LOG_DEBUG)
@staticmethod
def query_for_peer(source_hash):
diff --git a/nomadnet/Directory.py b/nomadnet/Directory.py
index 0f10e24..9d3029b 100644
--- a/nomadnet/Directory.py
+++ b/nomadnet/Directory.py
@@ -12,12 +12,17 @@ class Directory:
@staticmethod
def received_announce(destination_hash, announced_identity, app_data):
app = nomadnet.NomadNetworkApp.get_shared_instance()
- destination_hash_text = RNS.hexrep(destination_hash, delimit=False)
- associated_peer = RNS.Destination.hash_from_name_and_identity("lxmf.delivery", announced_identity)
+ if not destination_hash in app.ignored_list:
+ destination_hash_text = RNS.hexrep(destination_hash, delimit=False)
- app.directory.node_announce_received(destination_hash, app_data, associated_peer)
- app.autoselect_propagation_node()
+ associated_peer = RNS.Destination.hash_from_name_and_identity("lxmf.delivery", announced_identity)
+
+ app.directory.node_announce_received(destination_hash, app_data, associated_peer)
+ app.autoselect_propagation_node()
+
+ else:
+ RNS.log("Ignored announce from "+RNS.prettyhexrep(destination_hash), RNS.LOG_DEBUG)
def __init__(self, app):
diff --git a/nomadnet/NomadNetworkApp.py b/nomadnet/NomadNetworkApp.py
index a441703..62b4865 100644
--- a/nomadnet/NomadNetworkApp.py
+++ b/nomadnet/NomadNetworkApp.py
@@ -65,6 +65,7 @@ class NomadNetworkApp:
self.rns = RNS.Reticulum(configdir = rnsconfigdir)
self.configpath = self.configdir+"/config"
+ self.ignoredpath = self.configdir+"/ignored"
self.logfilepath = self.configdir+"/logfile"
self.errorfilepath = self.configdir+"/errors"
self.storagepath = self.configdir+"/storage"
@@ -202,12 +203,36 @@ class NomadNetworkApp:
RNS.log("The contained exception was: %s" % (str(e)), RNS.LOG_ERROR)
nomadnet.panic()
+ self.ignored_list = []
+ if os.path.isfile(self.ignoredpath):
+ try:
+ fh = open(self.ignoredpath, "rb")
+ ignored_input = fh.read()
+ fh.close()
+
+ ignored_hash_strs = ignored_input.splitlines()
+
+ for hash_str in ignored_hash_strs:
+ if len(hash_str) == RNS.Identity.TRUNCATED_HASHLENGTH//8*2:
+ try:
+ ignored_hash = bytes.fromhex(hash_str.decode("utf-8"))
+ self.ignored_list.append(ignored_hash)
+
+ except Exception as e:
+ RNS.log("Could not decode RNS Identity hash from: "+str(hash_str), RNS.LOG_DEBUG)
+ RNS.log("The contained exception was: "+str(e), RNS.LOG_DEBUG)
+
+ except Exception as e:
+ RNS.log("Error while fetching loading list of ignored destinations: "+str(e), RNS.LOG_ERROR)
self.directory = nomadnet.Directory(self)
self.message_router = LXMF.LXMRouter(identity = self.identity, storagepath = self.storagepath, autopeer = True)
self.message_router.register_delivery_callback(self.lxmf_delivery)
+ for destination_hash in self.ignored_list:
+ self.message_router.ignore_destination(destination_hash)
+
self.lxmf_destination = self.message_router.register_delivery_identity(self.identity, display_name=self.peer_settings["display_name"])
self.lxmf_destination.set_default_app_data(self.get_display_name_bytes)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────